04. 构造函数和文件组织

构造你的函数

在上一课中,你学习了两种不同的函数声明和定义的方法:
*在 main() 上方声明函数,并在 main 下方定义函数
*在 main() 上方同时声明并定义函数

随着 C++ 程序变得越来越复杂,你可能需要将代码分成多个文件。分开保存函数定义和声明有助于分割并组织你的代码。

我们看看上一课的函数测验中的这段代码。

# include <iostream>

float distance(float velocity, float acceleration, float time_elapsed);

int main() {

    std::cout << distance(3, 4, 5) << std::endl;  
    std::cout << distance(7.0, 2.1, 5.4) << std::endl;

    return 0;   
}

float distance(float velocity, float acceleration, float time_elapsed) {
    return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed;
}

代码被组织成两个文件,而不是像以前的测验一样将所有内容都放到 main.cpp 中。看看下面的代码,然后点击“测试运行”按钮。

Start Quiz:

#include <iostream>

float distance(float velocity, float acceleration, float time_elapsed);

int main() {

    std::cout << distance(3, 4, 5) << std::endl;  
    std::cout << distance(7.0, 2.1, 5.4) << std::endl;
    
    return 0;   
}
float distance(float velocity, float acceleration, float time_elapsed) {
    return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed;
}

在后台,main.cpp 和 distance.cpp 正在编译。由于编译发生在教室的后端,所以你不到。

但是,如果你要在本地运行此程序,则可以打开一个终端并导航到包含这两个文件的文件夹。输入以下命令

g++ main.cpp distance.cpp
./a.out

即可一起编译两个文件,然后执行该程序。

由于你已经将函数定义在 main.cpp 之外的独立文件中,因此可以更轻松地在代码的其他部分重用该函数。

头文件

函数声明

float distance(float velocity, float acceleration, float time_elapsed);

通常也会单独创建一个文件。声明保存在所谓的 头文件 中,因为头是 main() 函数上方的信息。头文件扩展名通常为 .h 或 .hpp。下面的代码与上面相同,但在头文件中有函数声明。点击“测试运行”按钮,你会看到这个代码也能运行:

Start Quiz:

#include <iostream>
#include "distance.h"

int main() {

    std::cout << distance(3, 4, 5) << std::endl;  
    std::cout << distance(7.0, 2.1, 5.4) << std::endl;
    
    return 0;   
}
float distance(float velocity, float acceleration, float time_elapsed) {
    return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed;
}
float distance(float velocity, float acceleration, float time_elapsed);

代码行

# include "distance.h"

将 distance.h 的内容粘贴到 main.cpp 中。

现在,我们假设你想在不同的文件中重用你的 distance 函数。你所要做的,就是使用 include 语句在新文件的顶部声明函数:

# include "distance.h"

然后就可以在程序的另一部分使用该函数了。

将代码组织到不同的 .cpp 文件中,可以把声明与实现分离。此外,使用头文件意味着你不必记住如何进行函数声明,因为你可以用简单的语法将其包含在内

# include "distance"

要编译代码,只需要编译 .cpp文件而不是 .h 文件即可:

g++ main.cpp distance.cpp

文件命名

命名约定规定,头文件和相关的 cpp 文件需使用相同的名称。因此,很显然,distance.h 包含了 distance.cpp 的头部声明。你还会注意到,函数本身名称为 distance()。因此,函数名、.cpp 文件和 .h 文件都是匹配的。

这些是命名约定。如果你不遵循这些约定,你的 C++代码仍然会被编译;但我们强烈建议你遵循这些约定。

Include 语法

你可能想知道,为什么有两种不同类型的 include 语句:

# include <iostream>
# include "distance.h"

带引号的 include 语句告诉程序在当前目录中查找 distance.h 文件。

<> 语法则取决于你的 C++ 环境。通常,环境被设置为查找存储 C++ 库的文件,如标准库。

文件类型和定义

QUIZ QUESTION: :

每种文件类型中包括哪种代码类型?

ANSWER CHOICES:



代码

文件类型

main.cpp

function.h

function.cpp

SOLUTION:

代码

文件类型

main.cpp

function.h

function.cpp